package Server;
import Factorial.Factorial;
import static java.lang.Math.pow;
//陈友豪
public class GroupImpl implements Factorial{

    @Override
    public int fact(int n) {
        int arr[];
        int sum = 0;
        arr = new int[n * 4];
        arr[0] = 1;
        int p = 0;    //记录当前数字位数
        for(int i=1;i<=n;i++)
        {
            int t = 0;   //记录进位
            for(int j = 0; j < p; j++){   //将最后一位之前的数字确定，并且确定最后一位的进位
                arr[j] = arr[j] * i + t;
                t = 0;
                if(arr[j] >= 10){
                    t = arr[j] / 10;
                    arr[j] = arr[j] % 10;
                }
            }
            int cur = arr[p] * i + t;
            while(cur >= 10){
                arr[p++] = cur % 10;
                cur /= 10;
            }
            arr[p] = cur;
        }
        //数组长度就是前一阶乘长度-1+最后一位乘以n的结果长度
        int j = p;
        while(j>=0)
        {
            sum+=arr[j] * pow(10,j);
            j--;
        }
        return sum;
    }
}